#!/usr/bin/python
# -*-coding:UTF-8 -*-

# ========================
# @Time  : 2021-01-30
# @Author: Sunny
# ========================

#-------------------------------------装饰器-------------------------------
"""
@是装饰器语法

开放封闭原则：
封闭：已经实现的功能代码对修改是封闭
开放：对代码功能的扩展是开放的

装饰器：是开放封闭原则的一种体现
作用：在不修改功能代码的同时，给代码扩展新的功能

装饰器不一定是闭包

"""

#例如
#需求：给下面的功能函数添加一个新的工作：自动化测试，要求：要遵循开放封闭原则(不能更改函数内部代码以及调用方式)
#这个其实也是一个闭包函数

print()

def docaretor(f):
    """

    :param f: 接收被装饰的函数
    :return:
    """
    def wrapper():
        print('新增的功能，自动化测试')
        f()
    return wrapper   #返回函数
    # return wrapper() 错误写法，带括号是调用了函数，返回的是函数调用后的结果


# @docaretor    #==》@docaretor 的作用等同于后面那一行代码 func = docaretor(func)
#原理：把func当参数传给docaretor()函数，返回的是内层嵌套wrapper函数，，所以后面调用func()时实际上执行的是wrapper()函数
def func():
    print('功能函数原有的代码以：敲代码')
    print('功能函数原有的代码以：写作业')

func=docaretor(func)
func()


